﻿using System;
using System.Text;
using System.Collections.Generic;
using System.IO; 

using Microsoft.VisualStudio.TestTools.UnitTesting;
using DupeKill.Core.Discovery; 

namespace DupeKill.UnitTests.Discovery
{
    /// <summary>
    /// Zusammenfassungsbeschreibung für Test_FileIterator
    /// </summary>
    [TestClass]
    public class Test_FileIterator
    {
        public Test_FileIterator()
        {
            //
            // TODO: Konstruktorlogik hier hinzufügen
            //
        }

        private TestContext testContextInstance;

        /// <summary>
        ///Ruft den Textkontext mit Informationen über
        ///den aktuellen Testlauf sowie Funktionalität für diesen auf oder legt diese fest.
        ///</summary>
        public TestContext TestContext
        {
            get
            {
                return testContextInstance;
            }
            set
            {
                testContextInstance = value;
            }
        }

        #region Zusätzliche Testattribute
        //
        // Sie können beim Schreiben der Tests folgende zusätzliche Attribute verwenden:
        //
        // Verwenden Sie ClassInitialize, um vor Ausführung des ersten Tests in der Klasse Code auszuführen.
        // [ClassInitialize()]
        // public static void MyClassInitialize(TestContext testContext) { }
        //
        // Verwenden Sie ClassCleanup, um nach Ausführung aller Tests in einer Klasse Code auszuführen.
        // [ClassCleanup()]
        // public static void MyClassCleanup() { }
        //
        // Mit TestInitialize können Sie vor jedem einzelnen Test Code ausführen. 
        // [TestInitialize()]
        // public void MyTestInitialize() { }
        //
        // Mit TestCleanup können Sie nach jedem einzelnen Test Code ausführen.
        // [TestCleanup()]
        // public void MyTestCleanup() { }
        //
        #endregion

        [TestMethod]
        public void Test_Iteration_Over_Single_Directory_Descends()
        {
            TestCaseFileHelper.CreateFileSet000(); 

            List<string> fileList = new List<string>();

            using (IFileIterator iterator = FileIteratorFactory.Create(@".\root"))
            {
                iterator.Reset();

                while (iterator.Next())
                {
                    Assert.IsTrue(iterator.FullPath.StartsWith(iterator.Directory));
                    Assert.IsTrue(iterator.FullPath.EndsWith(iterator.FileName));
                    fileList.Add(iterator.FileName); 
                }
            }

            Assert.AreEqual(4, fileList.Count);
            Assert.IsTrue(fileList.Contains("001.txt"));
            Assert.IsTrue(fileList.Contains("002.txt"));
            Assert.IsTrue(fileList.Contains("003.txt"));
            Assert.IsTrue(fileList.Contains("004.txt"));
        }
    }
}
